package net.neptech.strategy.form.impl;

import cn.hutool.core.util.StrUtil;
import net.neptech.enums.workflow.FormTypeEnum;
import net.neptech.strategy.form.FormStrategy;
import net.neptech.util.DateUtil;
import net.neptech.util.JsonUtil;
import net.neptech.model.vo.FormVO;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class DateTimeFormStrategyImpl implements InitializingBean, FormStrategy {
    @Override
    public void afterPropertiesSet() throws Exception {
        afterPropertiesSet(FormTypeEnum.DATE_TIME.getType());
    }

    /**
     * 判断两个值是否一致
     *
     * @param v1 第一个值
     * @param v2 第二个值
     * @return true表示一致
     */
    @Override
    public boolean isSameValue(Object v1, Object v2) {
        String jsonString1 = JsonUtil.toJSONString(v1);
        String jsonString2 = JsonUtil.toJSONString(v2);

        //都为空
        if(StrUtil.isAllBlank(jsonString1,jsonString2)){
            return true;
        }
        //至少有一个不为空
        //如果有一个空的 肯定不一致
        if(StrUtil.isBlank(jsonString1)||StrUtil.isBlank(jsonString2)){
            return false;
        }


        return StrUtil.equals(jsonString1,jsonString2);
    }

    /**
     * 检查字段格式
     */
    @Override
    public void checkValue(Object value) {
        String dateVal = value.toString();
        boolean date = DateUtil.isDateTime(dateVal);
        if(!date) throw new RuntimeException("字段格式错误");
    }

    /**
     * 数据的长度
     */
    @Override
    public int length(String s) {
        return 1;
    }

    /**
     * 判断是否为空
     */
    @Override
    public boolean isBlank(Object value, FormVO formVO, Map<String, Object> paramMap) {
        return StrUtil.isBlankIfStr(value);
    }
}
